import Foundation

// 存储属性
class Student {
    var name: String
    let id: Int
    
    init(name: String, id: Int) {
        self.name = name
        self.id = id
    }
}
// 使用 `var` 或 `let` 定义，`let` 表示不可变。

// 计算属性
class Rectangle {
    var width: Double
    var height: Double
    
    init(width: Double, height: Double) {
        self.width = width
        self.height = height
    }
    
    var area: Double {
        get {
            return width * height
        }
        set(newArea) {
            let scale = sqrt(newArea / area)
            width *= scale
            height *= scale
        }
    }
}
let rect = Rectangle(width: 4, height: 5)
print("Area: \(rect.area)") // Output: Area: 20.0

// 属性观察者
class BankAccount {
    var balance: Double {
        // 设置前
        willSet {
            print("将从 \(balance) 更新为 \(newValue)")
        }
        // 设置后
        didSet {
            print("已从 \(oldValue) 更新为 \(balance)")
        }
    }
    
    init(balance: Double) {
        self.balance = balance
    }
}

let account = BankAccount(balance: 100.0)
account.balance = 200.0
// 输出:
// 将从 100.0 更新为 200.0
// 已从 100.0 更新为 200.0


//  懒加载属性
// 延迟初始化，使用 lazy 关键字。
class DataManager {
    // ()是指闭包马上运行，返回的是具体类型的值，而不是闭包
    lazy var largeData: [Int] = {
        print("加载大数据...")
        return Array(1...1000)
    }()
}

let manager = DataManager()
print("创建实例")
print(manager.largeData.count) // 输出: 加载大数据... 1000


// 类属性
class Config{
    static let maxusers = 100
    // getter语法
    class var baseURL: String {
        return "https://example.com"
    }
}
print(Config.maxusers) // 输出: 100
print(Config.baseURL) // 输出: https://example.com

